![kotがChromeDriverManagerのIssueに伴ったエラーを発生させていたので対処した記録](https://devio2023-media.developers.io/wp-content/uploads/2019/07/google-chrome-eyecatch.jpg)
kotがChromeDriverManagerのIssueに伴ったエラーを発生させていたので対処した記録
以前紹介した、King Of Time上の情報をローカルから取得できるライブラリ「kot」がDockerベースでの動作に更新されていました。
なお、この更新に気がついた理由は、ChromeDriverManagerのIssueへ対応しようとした時だったりします。
一気にあれこれ発生して手間取りましたが、何とか対処できたので実際にやったことをメモとして書いてみることにします。
アップデートの手順
kotとwebdriver_managerの両方に対応が必要になります。kotを更新したとしても、webdriver_managerのissueとその解決が直近で反映されていないためです。
手順としては以下の通り
- kotへ手を入れた部分の退避
- kotをアップデート
- 退避しておいた処理を反映
- kotのwebdriver_manager依存バージョンをfix
- 最新のwebdriver_managerに沿った形で変更
- kotのインストール
kotの修正退避
git stash辺りで問題ないはずです。
git stash save
kotのアップデート
最新のコミットをpullしておきます。
git pull
退避しておいた処理を反映
stashを反映させるだけです。
git stash apply
kotのwebdriver_manager依存バージョンをfix
kotの最新バージョンで指定されているwebdriver_managerのバージョンは当記事執筆時点で3.7.0です。fixが入っていないバージョンであるため4.0.0に引き上げます。
-webdriver-manager = "3.7.0" +webdriver-manager = "4.0.0"
最新のwebdriver_managerに沿った形で変更
おそらく一番手間取る作業ですが、修正ポイントはほんの数か所です。対象はkot/common/crawl.py
-from webdriver_manager.core.utils import ChromeType +from webdriver_manager.core.os_manager import ChromeType
or driver_options.browser_kind == BrowserKind.chromium ) and isinstance(options, webdriver.ChromeOptions): if driver_options.browser_kind == BrowserKind.chromium: - chrome_service = ChromeService( - ChromeDriverManager(path=DRIVER_PATH, chrome_type=ChromeType.CHROMIUM).install() - ) + chrome_service = ChromeService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()) else: - chrome_service = ChromeService(ChromeDriverManager(path=DRIVER_PATH).install()) + chrome_service = ChromeService(ChromeDriverManager().install()) driver = webdriver.Chrome(service=chrome_service, options=options) elif driver_options.browser_kind == BrowserKind.firefox and isinstance( options, webdriver.FirefoxOptions ): - gecko_service = GeckoService(GeckoDriverManager(path=DRIVER_PATH).install()) + gecko_service = GeckoService(GeckoDriverManager().install()) driver = webdriver.Firefox(service=gecko_service, options=options) elif driver_options.browser_kind == BrowserKind.remote: driver = webdriver.Remote(
さらにもう一箇所。Dockerビルド時にkotディレクトリが存在しないエラーが発生していました。一部typoのようです。docker/kot/Dockerfile
-ENV APP_HOME /kot +ENV APP_HOME = /kot
kotのインストール
最新のREADMEに沿ってインストールします。今回はcolimaを通してみました。
colima start poetry install poetry run invoke build
あとがき
今回のkotアップデートにより、処理完了までの時間がやや短縮されました。
もし同様のトラブルで動かせなくなっている場合は、当記事を参考にすることで期待通りの動作に戻せるかもしれません。